home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / Hack / MISC / HTC51.ZIP / HOWTO5_1.TXT
Encoding:
Text File  |  1996-05-18  |  23.5 KB  |  488 lines

  1.  
  2. HOW TO CRACK, by +ORC, A TUTORIAL
  3.  
  4. Lesson 5.1: Disk & CD-Rom access (basics) 
  5.  
  6. LESSON 5 (1) - HOW TO CRACK, HANDS ON - Disk/CDROM access (plus
  7. bypasses "on the fly")
  8.  
  9. Somewhere I have to put the bypasses (loader programs) in this
  10. tutorial, allow me to put them here:
  11.  
  12. Preparing a loader to bypass a protection [MARIO ANDRETTI]
  13.      At time the protectionists hook vectors in order to impose
  14. a particular protection. In this (and similar) cases a good
  15. crack-way is to prepare a "loader" program, that "de-hooks" the
  16. vector used for the protection. This kind of crack can be used
  17. also for internet cracking (on some firewall configurations, see
  18. lesson A.2).
  19.      As example let's take "Mario andretti racing challenge", a
  20. stupid game that uses the SAME (!) protection scheme you'll still
  21. find to day on some access routines of military servers around
  22. the witlessly called "free" world.
  23.  
  24. In order to crack this cram you would prepare a loader on the
  25. following lines:
  26.  
  27. loc   code           instruction        what's going on
  28. -------------------------------------------------------
  29. :0100 EB44           JMP 0146
  30. ...
  31. :0142 0000           <- storing for offset of INT_21
  32. :0144 5887           <- storing for segment of INT_21
  33. :0146 FA             CLI
  34. :0147 0E             PUSH CS
  35. :0148 1F             POP DS
  36. :0149 BCB403         MOV SP,03B4
  37. :014C FB             STI
  38. :014D 8C1EA901       MOV [01A9],DS      <- save DS
  39. :0151 8C1EAD01       MOV [01AD],DS         three
  40. :0155 8C1EB101       MOV [01B1],DS         times
  41. :0159 B82135         MOV AX,3521        <- get INT_21
  42. :015C CD21           INT 21                in ES:BX
  43. :015E 891E4201       MOV [0142],BX      <- store offset
  44. :0162 8C064401       MOV [0144],ES      <- store segment
  45. :0166 BA0201         MOV DX,0102
  46. :0169 B82125         MOV AX,2521        <- set INT_21 to
  47. :016C CD21           INT 21                DS:0102
  48. :016E 0E             PUSH CS
  49. :016F 07             POP ES             <- ES= current CS
  50. :0170 BBB403         MOV BX,03B4
  51. :0173 83C30F         ADD BX,+0F
  52. :0176 B104           MOV CL,04
  53. :0178 D3EB           SHR BX,CL          <- BX= 3C
  54. :017A B8004A         MOV AX,4A00        <- Modify memory block
  55. :017D CD21           INT 21                to 3C paragraphs
  56. :017F BA9E01         MOV DX,019E        <- ds:dx=program name
  57. :0182 BBA501         MOV BX,01A5        <- es:bx = param. block
  58. :0185 B8004B         MOV AX,4B00        <- load ma.com
  59. :0188 CD21           INT 21
  60. :018A 2E8B164201     MOV DX,CS:[0142]   <- reset old int_21
  61. :018F 2E8E1E4401     MOV DS,CS:[0144]
  62. :0194 B82125         MOV AX,2521
  63. :0197 CD21           INT 21
  64. :0199 B8004C         MOV AX,4C00        <- terminate with return
  65. :019C CD21           INT 21                code
  66. :019E 6D612E636F6D00 "ma.com"
  67.       0000           fence
  68. :01A7 B2015887
  69. :01AB B2015887
  70. :O1AF B2015887
  71.       0000           fence
  72.  
  73. let's now prepare a routine that hooks INT_21:
  74.  
  75. push all
  76. CMP AX,2500    <- go on if INT_21 service 25
  77. JNZ ret
  78. CMP Word Ptr [0065], C00B <- go on if location 65 = C00B
  79. JNZ ret
  80. MOV  Byte Ptr [0060], EB  <- crack instructions
  81. MOV  Byte Ptr [0061], 3C
  82. MOV  Byte Ptr [0062], 40  <- INC AX
  83. MOV  Byte Ptr [0063], 90  <- NOP
  84. MOV  Byte Ptr [0064], 48  <- DEC AX
  85. pop all
  86. JMP  FAR CS:[0142]  <- JMP previous INT_21
  87.  
  88.      From now on this loader will work every time that a program
  89. with location [0065] containing an 0R AX,AX instruction (0BC0:
  90. it's the case of ma.com) calls INT_21 service 25 (hook a vector),
  91. the target program will be modified on the fly and will get, at
  92. location [0060], the instruction JMP 3C locations ahead, despite
  93. the fact that it has routines capable of self checking in order
  94. to make sure it has not been modified.
  95.      The most important thing is the routine that YOU write that
  96. will precede the call to INT_21 (or any other INT) service 25 (or
  97. any other service) in order to crack on the fly the offending
  98. program. I'll show you another one, this one for [Reach for the
  99. skies] (reach.com):
  100.  
  101. push all
  102. CMP  AH,3D      <- is it service 3D? (open file)
  103. JNZ  ret        <- no, so ret
  104. CMP  DX,13CE    <- you wanna open file at 13CE?
  105. JNZ  ret        <- no, so ret
  106. MOV  AX,[BP+04] <- in this case
  107. MOV  DS,AX
  108. CMP  Byte Ptr [B6DA],74 <- old instructions
  109. JNZ  015B
  110. CMP  Byte Ptr [B6DB],0F <- ditto
  111. JNZ  015B
  112. CMP  Byte Ptr [B6DC],80 <- ditto, now we now where we are
  113. JNZ  015B
  114. MOV  Byte Ptr [B6DA],EB <- crack
  115. MOV  Byte Ptr [B697],40 <- camouflaged  no-opping
  116. MOV  Byte Ptr [B698],48 <- cam          nop
  117. MOV  Byte Ptr [B699],90 <- cam          nop
  118. MOV  Byte Ptr [B69A],40 <- cam          nop
  119. MOV  Byte Ptr [B69B],48 <- cam          nop
  120. MOV  DX,CS:[0165]
  121. MOV  DS,CS:[0167]
  122. MOV  AX,2521  <- set hook
  123. INT  21
  124. POP  all
  125. JMP  FAR CS:[0165]
  126. Here you did change the instruction 740F in the instruction EB0F,
  127. and you did "noop" the instructions at B697-B69B. (Well, more
  128. elegantly than "noop" them with "90" bytes, you choose a INC AX,
  129. DEC AX, NOP, INC AX, DEC AX sequence instead! There are sound
  130. reasons to use a sequence of "working" instructions instead of
  131. NOPs: recent protection schemes "smell" patched nops inside the
  132. program and trash everything if they find more than -say- three
  133. consecutive NOPs! You should always try to choose THE LESS
  134. INTRUSIVE and MORE "CAMOUFLAGED" solution when you crack!)
  135.      You can apply this kind of crack, on the same lines, to many
  136. programs that perform self checking of the code and hook the
  137. vectors.
  138.  
  139. REAL DISK ACCESS STUFF
  140.      Now we may come to the subject of this lesson:
  141.      As usual, let's begin from the beginning: history is always
  142. the key that allows an understanding of present and future, in
  143. cracking matters too. As the older 5 1/4 inch big black floppy
  144. disks were still used (the 320K/8 tracks or 360K/9 tracks ones,
  145. that were really "floppy" and have nowadays almost disappeared)
  146. one of the more common methods to protect a program, was to
  147. format the "master" (key) disk in a weird way. Old floppy disk
  148. for the PC did usually store 360K at 9 sectors per track.
  149.      Some basics for those of you that do not know anything: in
  150. order to defeat this kind of cracks you need to know two things:
  151. the floppy disk parameter block (FDPB) and the interrupt routines
  152. dealing with format/read disk (basically INT_13).
  153.      Most often, the protection scheme is to either format one
  154. or more sectors or tracks with sector sizes other than the
  155. standard 512 bytes, or to either give one of the sectors a wild
  156. sector number like 211 or just not format a whole track of
  157. eight/nine/15 sectors. If you, for instance, have got the same
  158. (very old) copy of VisiCalc master I do, you'll find that sector
  159. 8 on track 39 is missing entirely. The interrogation with
  160. assembly or with an "ad hoc" utility (I use the tools I wrote
  161. myself, but you 'll be able to find many such utilities in public
  162. domain, the oldest one, from 1984 (!) being the seasoned [U-ZAP]
  163. an "Ultra utility" from the "Freesoft company") will tell you
  164. which sector numbers were altered, their size in bytes, and if
  165. they were formatted with a CRC error (another not so fancy
  166. trick).
  167.      The floppy disk parameters are stored in the BIOS: interrupt
  168. vector 1E contains the address of the floppy disk parameter
  169. block. The FDPB's contents are the following:
  170. Offset    Function                 crackworthy?        Example
  171. 0    Step rate & head unload            no                  DF
  172. 1    head load time                     no                  02
  173. 2    Motor on delay                     no                  25
  174. 3    Number of bytes per sector         yes                 02
  175. 4    Last sector number                 yes                 12
  176. 5    Gap length                         yes                 1B
  177. 6    Data track length                  yes                 FF
  178. 7    Format gap length                  yes                 54
  179. 8    Format byte                        no                  F6
  180. 9    Head settle time                   no                  0F
  181. A    Motor start time                   no                  02
  182.  
  183. 0)   Offset #0: the left "nybble" (single digit) of this value
  184.      is the step rate time for the disk drive head. The right
  185.      nybble is the disk head unload time. These values are best
  186.      left alone.
  187. 1)   Offset #1: again, don't fool around with these values. The
  188.      left nybble is the disk head load time, and the right
  189.      nybble is the direct memory access mode select.
  190. 2)   Wait time until motor is turned off. Not normally of use.
  191. 3)   Bytes-per-sector value: AH-HAH! If you place a "0" in this
  192.      value, the PC expects all sectors to be 128 bytes long. A
  193.      "1" means a  sector size of 256 bytes, a "2" means 512
  194.      bytes (this is the standard DOS value), and a "3" means
  195.      1024 bytes per sector.
  196. 4)   Highest sector number on a track: this is used for
  197.      formatting and tells DOS how many sectors there are on each
  198.      track.
  199. 5)   Gap length for diskette reads: this is what you fool around
  200.      with if you keep getting CRC errors when you try to read a
  201.      non-standard size sector. Normally, you can just leave this
  202.      alone except when formatting with a U-Format tool.
  203. 6)   Data length: This contains the number of bytes in a sector
  204.      when the value in table byte #4 doesn't contain a 0, 1, 2,
  205.      or 3.
  206. 7)   Number of bytes in the gap between sectors: this is also
  207.      only used when formatting special tracks.
  208. 8)   Format fill byte: When formatting, this is the
  209.      initialization byte that will be placed in all new sectors.
  210. 9)   Head settle time: leave this alone.
  211. A)   Motor start time: don't fool with this either.
  212. In order to modify globally the number of tracks on a given disk
  213. and the number of sectors per track you can always format with
  214. the DOS command switches "/t:" and "/n:"
  215.                   FORMAT /t:tracks /n:sectors
  216.  
  217.      If you want to find out what the existing parameters are,
  218. run [Debug.exe] or [Symdeb.exe] and enter the following commands:
  219. -    d 0:78    l 4                 <- get FDPB address
  220.  0000:0070     22 05 00       <- debugger's likely response
  221. -    d 0:522   l a                 <- get 10 FDPB values
  222.  0000:520 DF 02 25 02 12 1B FF...  <- see preceding table
  223.  
  224.      Remember that all standard disk formats under DOS support
  225. a sector size of 512 bytes, therefore, for one-sided 5.25 inch
  226. floppies:
  227.                40t*8s*512b=163.840 bytes (160Kb)
  228.                40t*9s*512b=184.320 bytes (180Kb)
  229. and for two-sided 5.25 inch floppies:
  230.            40t*8s*512b*2sides=327.680 bytes (320Kb)
  231.            40t*9s*512b*2sides=368.640 bytes (360Kb)
  232.      Beginning with DOS version 3.0 (Yeah, more and more
  233. history!) a new floppy disk format has been supported: The IBM
  234. AT (80286 CPU) introduced the so called "high capacity" 5.25 u-
  235. inch floppy, capable of storing 1.2M at 15 sectors per track:
  236.           80t*15s*512b*2sides=1.228.800 bytes (1.2Mb)
  237.      Later on were introduced the to-day universally used 3.5
  238. inch floppies, the ones inside a rigid small plastic cartridge,
  239. and we have, similarly:
  240.              3.5-inch double sided/double density      720K
  241.             3.5-inch double sided/quad density (HD)    1440K
  242.               3.5-inch double sided/high density       2880K
  243.  
  244.  
  245. [INT_13, AH=18, Set media type for format]
  246.      In order to create weird layouts, the protectionists use
  247. interrupt 13h, service 18h, that specifies to the formatting
  248. routines the number of tracks and sectors per track to be placed
  249. on the media:
  250. *    Registers on entry: AH=18h; CH=Nø of tracks; CL= Sectors
  251.      per track; DL= Drive number (A=0; B=1;C=2... bit 7 is set
  252.      if the drive is an hard disk)
  253. *    Registers on Return: DI: Offset address of 11-byte
  254.      parameter table; ES: Segment address of 11-byte parameter
  255.      table.
  256.  
  257. [INT_13, AH=2, Read disk sectors]
  258. In order to read them, they have to use INT_13, service 2, read
  259. disk sectors, with following layout:
  260. *    Registers on entry: AH=2h; AL= Nø of sectors; BX= Offset
  261.      address of data buffer; CH=track; CL= Sector; DH= Head
  262.      (side) number; DL= Drive number; ES: Segment address of
  263.      data buffer.
  264. *    Registers on Return: AH= return code. If the carry flag is
  265.      not set, AH=0, therefore the weird sector has been read, if
  266.      on the contrary the carry flag is set, AH reports the
  267.      status byte as follows:
  268. 76543210  HEX  DEC       Meaning
  269. 1         80h  128       Time out - drive crazy
  270.  1        40h  064       Seek failure, could not move to track
  271.   1       20h  032       Controller kaputt
  272.    1      10h  016       Bad CRC on disk read
  273.     1     09h  009       DMA error - 64K boundary crossed
  274.     1     08h  008       DMA overrun
  275.      1    04h  004       Bad sector - sector not found
  276.       11  03h  003       Write protect!
  277.       1   02h  002       Bad sector ID (address mark
  278.        1  01h  001       Bad command
  279.  
  280. [Return code AH=9: DMA boundary error]
  281.      One of the possible errors should be explained, coz it is
  282. used in some protection schemes: AH=9 DMA boundary error, means
  283. that an illegal boundary was crossed when the in formation was
  284. placed into RAM. DMA (Direct memory access) is used by the disk
  285. service routines to place information into RAM. If a memory
  286. offset address ending in three zeros (ES:1000, ES: 2000...) falls
  287. in the middle of the area being overlaid by a sector, this error
  288. will occur.
  289.  
  290. [INT_13, AH=4 Verify disk sectors]
  291.      Another possible protection interrupt is interrupt 13H,
  292. service 4, Verify disk sectors. Disk verification takes place on
  293. the disk and DOES NOT involve verification of the data on the
  294. disk against data in memory! This function has no buffer
  295. specification, does not read or write a disk: it causes the
  296. system to read the data in the designated sector or sectors and
  297. to check its computed cyclic redundancy check (CRC) against data
  298. stored on the disk. See INT_13, AH=2 registers and error report.
  299.  
  300. [CRC]
  301.      The CRC is a checksum, that detects general errors. When a
  302. sector is written to disk, an original CRC is calculated AND
  303. WRITTEN ALONG with the sector data. The verification service
  304. reads the sector, recalculates the CRC, and compares the
  305. recalculated CRC with the original CRC.
  306.  
  307.  
  308.  
  309.      We saw that some protection schemes attempt to disguise
  310. interrupt calls. This is particularly frequent in the disk access
  311. protection schemes that utilize INT_13 (the "disk" interrupt).
  312.      If you are attempting to crack such programs, the usual
  313. course of action is to search for occurrences of "CD13", which
  314. is machine language for interrupt 13. One way or another, the
  315. protection scheme has to use this interrupt to check for the
  316. special sectors of the disk. If you examine a cross section of
  317. the program, however, you'll find programs which do not have
  318. "CD13" in their machine code, but which clearly are checking the
  319. key disk for weird sectors. How comez?
  320.      There are several techniques which can be used to camouflage
  321. the protection scheme from our nice prying eyes. I'll describe
  322. here the three such techniques that are more frequent:
  323. 1)   The following section of code is equivalent to issuing an
  324. INT 13 command to read one sector from drive A, side 0, track
  325. 29h, sector ffh, and then checking for a status code of 10h:
  326.      cs:1000   MOV  AH,02     ;read operation
  327.      cs:1002   MOV  AL,01     ;1 sector to read
  328.      cs:1004   MOV  CH,29     ;track 29h
  329.      cs:1006   MOV  CL,FF     ;sector ffh
  330.      cs:1008   MOV  DX,0000   ;side 0, drive A
  331.      cs:100B   XOR  BX,BX     ;move 0...
  332.      cs:100D   MOV  DS,BX     ;...to DS register
  333.      cs:100F   PUSHF          ;pusha flags
  334.      cs:1010   PUSH CS        ;pusha CX
  335.      cs:1011   CALL 1100      ;push address for next
  336.                               instruction onto stack and branch
  337.      cs:1014   COMP AH,10     ;check CRC error
  338.      cs:1017   ... rest of verification code
  339.      ...
  340.      ...
  341.      cs:1100   PUSHF          ;pusha flags
  342.      cs:1101   MOV  BX,004C   ;address of INT_13 vector
  343.      cs:1104   PUSH [BX+02]   ;push CS of INT_13 routine
  344.      cs:1107   PUSH [BX]      ;push IP of INT_13 routine
  345.      cs:1109   IRET           ;pop IP,CS and flags
  346. Notice that there is no INT 13 command in the source code, so if
  347. you had simply used a debugger to search for "CD13" in the
  348. machine code, you would never have found the protection routine.
  349.  
  350. 2)   Another technique is to put in a substitute interrupt
  351. instruction, such as INT 10, which looks harmless enough, and
  352. have the program change the "10" to "13 (and then back to "10")
  353. on the fly. A search for "CD13" would turn up nothing.
  354.  
  355. 3)   The best camouflage method for interrupts I have ever
  356. cracked (albeit not on a INT 13) was a jump to a section of the
  357. PROGRAM code that reproduces in extenso the interrupt code. This
  358. elegant (if a little overbloated) disguise mocks every call to
  359. the replicated interrupt.
  360.  
  361. LOADING ABSOLUTE DISK SECTORS
  362. Old good [debug.com] has been called the "swiss army knife" of
  363. the cracker. It allows a lot of nice things, inter alia the
  364. loading, reading, modifying and writing of absolute sectors of
  365. the disks. The sector count starts with the first sector of track
  366. 0, next sector is track 0, second side (if double sided), then,
  367. back to the first side, track 1, and so on, until the end of the
  368. disk. Up to 80h (128) sectors can be loaded at one time. To use
  369. you must specify starting address, drive (0=A, 1=B, etc...),
  370. starting sector and number of sectors to load.
  371.                                -   l 100 0 10 20
  372. This instruction tells DEBUG to load, starting at DS:0100, from
  373. drive A, sector 10h for 20h sectors. This allows at times the
  374. retrieval of hidden and/or weird formatted data. If you get an
  375. error, check the memory location for that data. Often times, part
  376. of the data has been transferred before the error occurs, and the
  377. remainder can be manually entered or gathered through repetitive
  378. retries.
  379.  
  380. Bear all this in mind learning the following cracks.
  381. Let's now crack an "oldie" primitive:
  382. MS Flight simulator (old version 2.12, from 1985!)
  383. This old program used -in 1985!- following beautiful protection
  384. scheme: on the disk you had only a "stub", called FS.COM with few
  385. bytes, which had following instructions:
  386.  
  387. loc   code           instruction        what's going on
  388. -------------------------------------------------------
  389. :0100 FA             CLI                ;why not?
  390. :0101 33C0           XOR AX,AX          ;ax=0
  391. :0103 8ED0           MOV SS,AX          ;ss=0
  392. :0105 BCB0C0         MOV SP,C0B0        ;SP=C0B0
  393. :0108 8EC0           MOV ES,AX          ;ES=0
  394. :010A 26C70678003001 MOV Wptr ES:[0078],0130 ;Wp 0:78=130
  395. :0111 268C0E7A00     MOV ES:[007A],CS   ;0:7A=Segment
  396. :0116 BB0010         MOV BX,1000        ;BX=1000
  397. :0119 8EC3           MOV ES,BX          ;ES=1000
  398. :011B 33DB           XOR BX,BX          ;BX=0
  399. :011D B80102         MOV AX,0201        ;AH=2 AL=1 sector
  400. :0120 BA0000         MOV DX,0000        ;head=0 drive=0
  401. :0123 B96501         MOV CX,0165        ;track=1 sector=65 (!)
  402. :0126 CD13           INT 13             ;INT 13/AH=2
  403. :0128 B83412         MOV AX,1234        ;AX=1234
  404. :012B EA00000010     JMP 1000:0000      ;JMP to data we just read
  405. :0130 CF             IRET               ;Pavlovian, useless ret
  406.  
  407.      You see what's happening in this old protection scheme,
  408. don't you? Herein you can watch the same snap that happens in
  409. more recent (much more recent) protection schemes (as you'll see
  410. in the next lesson): the protection searches for a weird
  411. formatted sector and/or for particular data.
  412.      That should be no problem for you any more: you should just
  413. reverse engineer everything (and that goes on pretty quickly:
  414. just watch and break on the INT_13 calls), fetch the "weird"
  415. data, tamper the whole crap and have your soup as you like it.
  416.      One more word about "old" protection schemes. Be careful not
  417. to spurn them! Some of them are
  418.     --CLEVER
  419.     --STILL USED
  420.     --DIFFICULT TO CRACK... I mean, this older DOS programs had
  421. nice protections... it's pretty annoying to crack windows
  422. programs that require a registration number: as you saw in Lesson
  423. 3, you just type your name and a serial number of your choice in,
  424. say "666666666", break into the program with WINICE, search the
  425. "666666666" and search too, for good measure, your own name, set
  426. a memory read breakpoint where the number dwells and look at the
  427. code that manipulates your input. As [Chris] rightly pointed out,
  428. you can even rip the code straight out of the program and create
  429. a key generator which will produce a valid code. This code will
  430. work for any name you typed in only in the "pure maths
  431. manipulation" protection schemes, and will on the contrary be
  432. specific, following the name you typed in, the "alpha-maths
  433. manipulation" protection schemes (like MOD4WIN, see the Windows
  434. lessons), watch in this case the "pseudo-random xoring" of the
  435. letters that compose your name.
  436.     --STUNNING, coz new ideas have always been infrequent, and
  437. they are getting more and more rare in this objectionable world
  438. of lazy, incapable programmers patronizing us with ill-cooked
  439. outrages like Windows'95... yeah, as usual there is no
  440. "development" at all, quite the contrary, I would say. Take a
  441. step backward, sip a good Martini-Wodka (please remember that
  442. only Ice cubes, Dry Martini, Wodka Moskovskaja, Schweppes'
  443. "Indian tonic" a green olive from Tuskany and a maltese lemon
  444. zest will really be perfect) and watch from your balcony, with
  445. unsullied eyes, your town and the people around you: slaves
  446. everywhere, leaving home at 7.30 in the morning, stinking in a
  447. progression of identical cars, forced to interminably watch
  448. advertisement panels and endlessly listen to boorish publicity,
  449. happy to go to work (if they happen to have the "luck" to work,
  450. in this inequitable society) the whole day long in order to
  451. produce other cars in order to buy, one day, a new car with a
  452. different colour...
  453.      Why people don't look at the stars, love each other, feel
  454. the winds, ban the stinking cars from the places where they live
  455. and eat, study colours... name yourself a not-consumistic
  456. activity? Why don't they read any poems any more? No poetry any
  457. more, in the grey society of the publicity-spots slaves...poetry
  458. will soon be forbidden, coz you cannot CONSUME as you read poems,
  459. and in this farce of a society you are BOUND to consume, that's
  460. the only thing they want you to do... you are CULTIVATED to
  461. consume... no books worth to read any more... stupid american
  462. conventional cram everywhere... boy, at times I'm missing some
  463. well placed neutron bombs, the ones that would kill all these
  464. useless zombies and leave noble books and good Wodka untouched.
  465. It's difficult to believe in democracy any more... if I ever
  466. did... all the useless zombie do -unfortunately- vote, and they
  467. do vote for "smiling semblances", for "conventionally minded
  468. idiots" that so act as if they would "really" be like what they
  469. "look" like and could not care less about anything else than
  470. making bucks and defend intolerant and petty patterns. The slaves
  471. choose the people they have "seen" on TV... as if the egyptians
  472. would VOTE for their pharaohs, exhilarated under the whips of
  473. publicity... sorry, at times I forget that you are here for the
  474. cracks, and could not care less about what I think...
  475.  
  476.      You 'll obtain the OTHER missing lessons IF AND ONLY IF you
  477. mail me back (via anon.penet.fi) with some tricks of the trade
  478. I may not know that YOU discovered. Mostly I'll actually know
  479. them already, but if they are really new you'll be given full
  480. credit, and even if they are not, should I judge that you
  481. "rediscovered" them with your work, or that you actually did good
  482. work on them, I'll send you the remaining lessons nevertheless.
  483. Your suggestions and critics on the whole crap I wrote are also
  484. welcomed.
  485.  
  486. +ORC   an526164@anon.penet.fi 
  487.  
  488.